{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,2.5*np.pi)\n",
    "plt.plot(x,np.sin(x+np.pi),x,np.cos(x+np.pi/64))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Package           Version\n",
      "----------------- -----------\n",
      "asttokens         2.4.1\n",
      "colorama          0.4.6\n",
      "comm              0.2.2\n",
      "debugpy           1.8.8\n",
      "decorator         5.1.1\n",
      "executing         2.1.0\n",
      "graphviz          0.20.3\n",
      "ipykernel         6.29.5\n",
      "ipython           8.29.0\n",
      "jedi              0.19.2\n",
      "jupyter_client    8.6.3\n",
      "jupyter_core      5.7.2\n",
      "matplotlib-inline 0.1.7\n",
      "nest-asyncio      1.6.0\n",
      "packaging         24.2\n",
      "parso             0.8.4\n",
      "Pillow            10.1.0\n",
      "pip               23.1.2\n",
      "platformdirs      4.3.6\n",
      "prompt_toolkit    3.0.48\n",
      "psutil            6.1.0\n",
      "pure_eval         0.2.3\n",
      "pygame            2.5.2\n",
      "Pygments          2.18.0\n",
      "python-dateutil   2.9.0.post0\n",
      "pywin32           308\n",
      "pyzmq             26.2.0\n",
      "setuptools        65.5.0\n",
      "six               1.16.0\n",
      "stack-data        0.6.3\n",
      "tornado           6.4.1\n",
      "traitlets         5.14.3\n",
      "typing_extensions 4.12.2\n",
      "wcwidth           0.2.13\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[notice] A new release of pip is available: 23.1.2 -> 24.3.1\n",
      "[notice] To update, run: python.exe -m pip install --upgrade pip\n"
     ]
    }
   ],
   "source": [
    "!pip list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             1             \n",
      "            1 1            \n",
      "           1 2 1           \n",
      "          1 3 3 1          \n",
      "         1 4 6 4 1         \n",
      "       1 5 10 10 5 1       \n",
      "      1 6 15 20 15 6 1     \n",
      "    1 7 21 35 35 21 7 1    \n",
      "   1 8 28 56 70 56 28 8 1  \n",
      "1 9 36 84 126 126 84 36 9 1\n"
     ]
    }
   ],
   "source": [
    "def generate_yanghui_triangle(n):\n",
    "    triangle = []  # 用于存储三角形的每一行\n",
    "\n",
    "    for i in range(n):\n",
    "        row = [1]  # 每行的第一个元素为1\n",
    "        if triangle:  # 若不是第一行\n",
    "            last_row = triangle[-1]\n",
    "            # 根据上一行计算当前行的值\n",
    "            row += [last_row[j] + last_row[j + 1] for j in range(len(last_row) - 1)]\n",
    "            row.append(1)  # 每行的最后一个元素为1\n",
    "        triangle.append(row)\n",
    "\n",
    "    return triangle\n",
    "\n",
    "\n",
    "def print_yanghui_triangle(triangle):\n",
    "    n = len(triangle)\n",
    "    max_width = len(' '.join(map(str, triangle[-1])))  # 计算最后一行的宽度\n",
    "\n",
    "    for row in triangle:\n",
    "        row_str = ' '.join(map(str, row))\n",
    "        print(row_str.center(max_width))  # 居中打印\n",
    "\n",
    "\n",
    "# 设置杨辉三角的行数\n",
    "num_rows = 10\n",
    "yanghui_triangle = generate_yanghui_triangle(num_rows)\n",
    "print_yanghui_triangle(yanghui_triangle)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                      \n",
      "                                                                      \n",
      "                                                                      \n",
      "                                                                      \n",
      "                                                                      \n",
      "                                                                      \n",
      "                                                                      \n",
      "                                                                      \n",
      "                                                                      \n",
      "              ********                                                \n",
      "            **        **                                              \n",
      "          **            **                                            \n",
      "        **                **                                          \n",
      "       *                    *                                         \n",
      "      *                      *                                        \n",
      "    **                        **                                      \n",
      "   *                            *                                     \n",
      "  *                              *                                    \n",
      " *                                *                                   \n",
      "*                                  *                                  \n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "\n",
    "# 设置参数\n",
    "width = 70     # 图的宽度\n",
    "height = 20    # 图的高度\n",
    "scale = 10     # 缩放因子，控制波形的幅度\n",
    "\n",
    "# 生成sin函数的字符图\n",
    "for y in range(height):\n",
    "    # 计算当前行的y值（从height-1到0）\n",
    "    current_y = height - y - 1\n",
    "    line = ''\n",
    "\n",
    "    for x in range(width):\n",
    "        # 计算sin函数的值\n",
    "        sine_value = math.sin(x / width * 2 * math.pi) * scale\n",
    "\n",
    "        # 将sine函数的值映射到字符位置\n",
    "        if round(sine_value) == current_y:\n",
    "            line += '*'\n",
    "        else:\n",
    "            line += ' '\n",
    "\n",
    "    # 输出当前行\n",
    "    print(line)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'grade_evaluation_flowchart.pdf'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from graphviz import Digraph\n",
    "\n",
    "# 创建一个有向图对象\n",
    "dot = Digraph(comment='Grade Evaluation', \n",
    "               graph_attr={'charset': 'utf8'}, \n",
    "               node_attr={'fontname': 'SimHei'}, \n",
    "               edge_attr={'fontname': 'SimHei'})\n",
    "\n",
    "# 添加节点\n",
    "dot.node('A', '开始')\n",
    "dot.node('B', '输入成绩')\n",
    "dot.node('C', '成绩 >= 90 ?')\n",
    "dot.node('D', '等级 = A')\n",
    "dot.node('E', '成绩 >= 80 ?')\n",
    "dot.node('F', '等级 = B')\n",
    "dot.node('G', '成绩 >= 70 ?')\n",
    "dot.node('H', '等级 = C')\n",
    "dot.node('I', '成绩 >= 60 ?')\n",
    "dot.node('J', '等级 = D')\n",
    "dot.node('K', '等级 = F')\n",
    "dot.node('L', '输出等级')\n",
    "dot.node('M', '结束')\n",
    "\n",
    "# 添加边\n",
    "dot.edge('A', 'B')\n",
    "dot.edge('B', 'C')\n",
    "dot.edge('C', 'D', label='是')\n",
    "dot.edge('C', 'E', label='否')\n",
    "dot.edge('E', 'F', label='是')\n",
    "dot.edge('E', 'G', label='否')\n",
    "dot.edge('G', 'H', label='是')\n",
    "dot.edge('G', 'I', label='否')\n",
    "dot.edge('I', 'J', label='是')\n",
    "dot.edge('I', 'K', label='否')\n",
    "dot.edge('D', 'L')\n",
    "dot.edge('F', 'L')\n",
    "dot.edge('H', 'L')\n",
    "dot.edge('J', 'L')\n",
    "dot.edge('K', 'L')\n",
    "dot.edge('L', 'M')\n",
    "\n",
    "# 渲染并显示图\n",
    "dot.render('grade_evaluation_flowchart', format='png', cleanup=True)\n",
    "dot.view()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                     ...BBBBBBBB%i                                            \n",
      "                                             -@B@BBBBBBBBBBBBBBBBBBBBBBBBBB@@\"                                \n",
      "                                        X_BBBBBBBBBB<>>>>>>>>>>>>i-W@B%BBBBBBBBBBB$.                          \n",
      "                                    .Bt@BBBBBBBBBBBBBBh>>>>>>>>>>>><W$BBBBBBBBBBBBBBBB$.                      \n",
      "                                   $BBBBBBBB>>>>@$BBBBBB@i>>>>>>>jBBBBBBBBBBB@@BBBBBBBBBB@                    \n",
      "                                 &$BBBBBBWi>>>>>>>iBBBBBBi>>>>>>iBBBBBBBB!<>>>>>uBBBBBBBBBBBB                 \n",
      "                               .i>>$BB/>>>>M%&>l{8/i<M*i>>>>>>>>>>>>>>>>il&88&88n>!@BBBBB>>iBB$               \n",
      "         l/.                   B>>>>>>8!>>>>>>>>>>>>i%i>>>>>>>>>>>>>>%!>>>>>>>>>>>>i%_>>>>>><BB@@             \n",
      "         B>>Z.  8>u            i>>>i8>>>>>>>>>>>>>>>>>>%i>>>>>>>>><8>>>>>>>>>>>>>>>>>>!]>>>>>>BBBB            \n",
      "  %i>>q$  >>>>z&>>            >>>>>%>>>>>ii@BBBBBBBBB>i>o<>>>>>>>p><iBBBBBBBB@~<>>>>>>>>B<>>>>@BBBB\"          \n",
      "   'B<>>>>>>>h<>>%            d>>>>>>>><@BBBBBBBBBBBBBB%i>>>>>>>>~BBBBBBBBBBBBBBC>>>>>>>i8>>>>>BBBBB          \n",
      " o$|]}?>>>>>>>>>i.        $!>>>>>>>>>>BBBBBBB@      %BBBBl>>>>>>BBBBB8.    @BBBBB@i>>>>>>>>>>>>@@BBBB'        \n",
      "  -BBBli>>>>>>>>>i%    -<>>>>>>>>>>>>BBBBBBB        BBBBBJ>>>>>$BBBB$      .@BBBBBu>>>>>>>>>>>>!BBB~>>>ilj    \n",
      "    .%>>><>i>*>>>>>i$>>>>>>>>>>>>>>>>$BBBBBBBB.  q@BBBBB@>>>>>>%BBBBB@b i$BBBBBBBB1>>>>>>>>>>>>!B>>>>>>>>>i$. \n",
      "    @B$..   .n>>>>!>>>>>>>>>>>>>>>>>>>@BBBBBBBBBBBBBBBBB>>>>>>>iBBBBBBBBBBBBBBBBB>>>>>>>>>>>>>#>>>>>>>>>>>>i$ \n",
      "              >>>r>>>>>>>>>>>>>>>>>>>>>>>>Z@BBBBBB@@i<>>>>>>>>>>>>>l8%B@B@@BBM~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>@\n",
      "               i<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n",
      "               .B>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n",
      "                .>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$\n",
      "                 @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$$@.    xBv>>>>>>>%  \n",
      "                  $i>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!8%%pddOpppddpdddOd          \n",
      "                    $>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>j8mwqppdddddddddddddddddd+         \n",
      "                     okBi>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>iii8%wZpddddddddddddddddddddddddddm8         \n",
      "                   Jqddpp0Z%z>>>>>>>>>>>>>>>8d>>>>>>>>>>i%8Wmppddpddddddddddddddddddddddddddddddddddm8        \n",
      "                   ']8pdddddddddwww8%8Bhkhk*B8%8&qq0dddddddddddddddddddddddddddddddddddddddddddddddddq8       \n",
      "                        '8wpdddddpkdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd&      \n",
      "                             8wmp&ZddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpO.    \n",
      "                                %qdddddddddddddddddddddddddddddddddddddddddddddddddp8mdddddddddddddddZ0mq&    \n",
      "                                wpdddddddddddddddddddddddddddddddddddddddddddddddddp8Oddddddddmw#&|<B.        \n",
      "                               8dddddddddddddddddddddddddddddddddddddddddddddddddddq8qw%&pd>>>>>>>>>k         \n",
      "                              Wpdddddddddddddddddddddddddddddddddddddddddddddddddddd0ddddddL>>>>>>>><         \n",
      "                              %ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddmd>>>>>>>@         \n",
      "                             #ppdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddw.O>>>>>*          \n",
      "                             %qddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpQ*  B>>>L]          \n",
      "                             %qddddddddddddppwwOdddddddddddppqqqpdpdddddddddddZpwwwwwqqpQ#B>>>>>>>>B          \n",
      "                             .%OZQQQLZZ8(^'`````',8oLq#8p:`````''`QddbpZwZ&`^````````````,8@>>>>>>>@          \n",
      "                             'B````````````````````````````````````````````````````````````:BXiiB$            \n",
      "                             $\"````````````````````````````````````````````````````````````'$                 \n",
      "                             $'````````````````````````````````````````````````````````````'8                 \n",
      "                            ^^``````````````````````````````^B``````````````````````````````'\"                \n",
      "                            Q,``````````````````````````````'Bj'````````````````````````````,I                \n",
      "                               `-XboMBaW#hm/?_iII{'..         .          %i<>>i>>>>>@                         \n",
      "                                      c>>>>>>>>>>@                        $i>>>>>>>>%                         \n",
      "                                       <>>>>>>>>>                          ?>>>>>>><%                         \n",
      "                                       '>>>>>>><w                          B!>>>>>>$U                         \n",
      "                                        $%l>\\%^.`                          O..      ^                         \n",
      "                                       .$X      @                           $      '$'                        \n",
      "                                      /-!!0    .B                            $B   kr!U                        \n",
      "                                   .kB!!!!ii!!!!>B                        B+!!!!!iiiiiiimBB@                  \n",
      "  lli\"   l  +<<^ i  < !- +?   %+!!!!i!ii>\\a$B@$$$@.                   )<-`mX0b0@$B uk$Y{X}1] BX )}]_1n;+(  X) \n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "#这两个数字是调出来的\n",
    "image_path = r'C:\\Users\\sjzfl\\fanyening\\小新.jpg'\n",
    "image = plt.imread(image_path)\n",
    "pic_height, pic_width, _ = image.shape\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "#获取图像的高、宽\n",
    "show_height = 50\n",
    "show_width = 110\n",
    "#设置显示的高、宽\n",
    "gray = 0.2126 * image[:, :, 0] + 0.7152 * image[:, :, 1] + 0.0722 * image[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "ascii_char = list(\"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "char_len = len(ascii_char)\n",
    "for i in range(show_height):\n",
    "    # 根据比例映射到对应的像素\n",
    "    y = int(i * pic_height / show_height)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'graph.png'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from graphviz import Digraph\n",
    "dot = Digraph()\n",
    "dot.node('1', 'start')\n",
    "dot.node('2', 'Input=>x')\n",
    "dot.node('3', 'If x>0')\n",
    "dot.node('4', 'Plot Sinx and Cosx')\n",
    "dot.node('5', 'End')\n",
    "dot.edge('1', '2')\n",
    "dot.edge('2', '3')\n",
    "dot.edge('3', '4')\n",
    "dot.edge('4', '5')\n",
    "dot.render('graph',format='png', view=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'accumulator_flowchart.pdf'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from graphviz import Digraph\n",
    "\n",
    "# 创建一个有向图对象\n",
    "dot = Digraph(comment='Profit Tax Calculation',graph_attr={'charset': 'utf8'},node_attr={'fontname': 'SimHei'}, edge_attr={'fontname': 'SimHei'})\n",
    "\n",
    "# 添加节点\n",
    "dot.node('A', '开始')\n",
    "dot.node('B', '初始化累加器 = 0')\n",
    "dot.node('C', '输入数字')\n",
    "dot.node('D', '是否输入结束？')\n",
    "dot.node('E', '累加器 += 输入的数字')\n",
    "dot.node('F', '输出累加器')\n",
    "dot.node('G', '结束')\n",
    "\n",
    "# 添加边\n",
    "dot.edge('A', 'B')\n",
    "dot.edge('B', 'C')\n",
    "dot.edge('C', 'D')\n",
    "dot.edge('D', 'E', label='否')\n",
    "dot.edge('D', 'F', label='是')\n",
    "dot.edge('E', 'C')\n",
    "dot.edge('F', 'G')\n",
    "dot.edge('G', 'A')\n",
    "\n",
    "# 渲染并显示图\n",
    "dot.render('accumulator_flowchart', format='png', cleanup=True)\n",
    "dot.view()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
